# -*- coding: utf-8 -*-
# @Author: Jerry
# @Date:   2022-02-21 14:01:09
# @Last Modified by:   Jerry
# @Last Modified time: 2022-02-21 17:20:39

# http://www.woshicver.com/
# 了解如何在OpenCV中处理鼠标事件
# 您将学习以下功能：cv.setMouseCallback()

# **********
# 列出所有的鼠标事件
import cv2 as cv
events = [i for i in dir(cv) if 'EVENT' in i]
print(events)

# **********
# 创建鼠标回调函数具有特定的格式，该格式在所有地方都相同。它仅在功能上有所不同。
import numpy as np

# **********
# 鼠标回调函数和参数列表 固定
def draw_circle(event,x,y,flags,param):
	if event == cv.EVENT_LBUTTONDBLCLK: # left button double click
		cv.circle(img,(x,y),100,(255,0,0),-1)
		# 圆心坐标 == 鼠标点击的位置坐标
		# 半径 100
		# 颜色 bgr (255,0,0)
		# Thickness of the circle outline (-1表示填充，>=0时表示画圆的线条宽度)

# **********
# 创建一个黑色的图像，一个窗口，并绑定到窗口的功能
img = np.zeros((512,512,3),np.uint8)
cv.namedWindow('image')
cv.setMouseCallback('image',draw_circle) # 调用鼠标回调函数的方式
while True:
	cv.imshow('image',img)
	if cv.waitKey(20) & 0xFF == 27: #按键 cmd + q
		break

cv.destroyAllWindows()

